import math

from pygame_test.MoveRect import MoveRect


def jump(rect0, rect1, up=10, forward=0):
    '''
    根据初始参数计算跳跃轨迹,返回整个轨迹的左上角x,y值的tuple
    跳跃初始速度是up, 越到高处速度越慢, 速度到零时开始往下落, 越往下越快, 直到掉落到rect1位置, 函数结束
    :param rect0: 初始的rect值
    :param up: 向上的参数, 越大跳得越高
    :param forward: 横向参数, 正值:向前, 负值:向后, 零:原地
    :return: 列表,包含整个跳跃过程的速度系数, 可以当速度用, 也可以乘以设定的速度
    '''
    res = []
    last = 0
    for i in range(up):
        # 随着i的增加, 求i的平方根, 每一次和上一次的差值越来越小, 对应速度越来越小
        cur = math.sqrt(i)
        res.append((cur - last)*-1)
        last = cur
    res.append(0)  # 最后补一个零速度
    # for i in range(int(rect1.y-rect0.y),0,-1): # 降序到1
    for i in res[::-1]:
        res.append(i*-1)

    print(res)
    return res


if __name__ == '__main__':
    import pygame
    import sys
    jump(1, 1)
    pygame.init()
    screen = pygame.display.set_mode((500,500))
    rect0 = 100,100,10,10
    rect1 = 100,100,10,10
    move_rect = MoveRect(100,400,10,10,(255,0,255))
    count = 0
    up = 20
    speedy = 50
    fclock = pygame.time.Clock()
    l = len(jump(rect0, rect1, up))
    while True:
        count+=1
        # print(count%up)
        # print(jump(rect0, rect1, up)[count % up])
        move_rect.move(0.5,speedy*jump(rect0,rect1,up)[count%l])
        # move_rect.move(1,1)
        move_rect.draw(screen)
        pygame.display.update()
        for e in pygame.event.get():
            if e.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        screen.fill((0, 0, 0))
        fclock.tick((10))


